package com.sh.suhe.utildemos.views.activity

import android.Manifest
import android.annotation.TargetApi
import android.content.ContentUris
import android.content.DialogInterface
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import android.view.View
import androidx.core.content.FileProvider
import com.sh.suhe.utildemos.R
import com.sh.suhe.utildemos.utils.DialogUtils
import java.io.File
import android.net.Uri
import android.provider.DocumentsContract
import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat
import java.io.FileNotFoundException


class PhoneProActivity : AppCompatActivity() {


    val TAKE_CAMERA = 101
    var PICK_PHOTO = 102
    var imageUri: Uri? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_phone_pro)
    }
   fun selectPhoto(v:View){

//       DialogUtils.setDialog(this,DialogUtils.STYLE_TWO_BUTTON,"",buts) {
//           var a = "a"
//
//       }
       val buts = arrayOf("拍照", "相册")
       DialogUtils.setDialog(this, DialogUtils.STYLE_ZEERO_BUTTON, "请选择方式", buts) { dialog, which ->
           var a = "a"
           if (which == -1){

           }else{

           }
        }
   }
    fun camera(){
        // 创建File对象，用于存储拍照后的图片
        //存放在手机SD卡的应用关联缓存目录下
        var outputImage =   File(getExternalCacheDir(), "output_image.jpg");
        /* 从Android 6.0系统开始，读写SD卡被列为了危险权限，如果将图片存放在SD卡的任何其他目录，
           都要进行运行时权限处理才行，而使用应用关联 目录则可以跳过这一步
         */
        try {
            if (outputImage.exists()) {
                outputImage.delete();
            }
        } catch (e :Exception ) {
            e.printStackTrace();
        }
        /*
           7.0系统开始，直接使用本地真实路径的Uri被认为是不安全的，会抛 出一个FileUriExposedException异常。
           而FileProvider则是一种特殊的内容提供器，它使用了和内 容提供器类似的机制来对数据进行保护，
           可以选择性地将封装过的Uri共享给外部，从而提高了 应用的安全性
         */

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            //大于等于版本24（7.0）的场合
            imageUri = FileProvider.getUriForFile(this, "com.feige.pickphoto.fileprovider", outputImage);
        } else {
            //小于android 版本7.0（24）的场合
            imageUri = Uri.fromFile(outputImage)
        }

        //启动相机程序
        var intent =   Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        //MediaStore.ACTION_IMAGE_CAPTURE = android.media.action.IMAGE_CAPTURE
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri)
        startActivityForResult(intent, TAKE_CAMERA)

    }
    fun ablumn(){
        //动态申请获取访问 读写磁盘的权限
        if (ContextCompat.checkSelfPermission(this,
                        Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE) , 101)
        } else {
            //打开相册
            var intent = Intent(Intent.ACTION_GET_CONTENT)
            //Intent.ACTION_GET_CONTENT = "android.intent.action.GET_CONTENT"
            intent.setType("image/*")
            startActivityForResult(intent, PICK_PHOTO); // 打开相册
        }

    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {
            TAKE_CAMERA ->{
                if (resultCode == RESULT_OK) {
                    try {
                        // 将拍摄的照片显示出来
                        var bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri))
//                        imageView.setImageBitmap(bitmap);
                    } catch ( e: FileNotFoundException) {
                        e.printStackTrace();
                    }
                }
            }
            PICK_PHOTO->{
                if (resultCode == RESULT_OK) { // 判断手机系统版本号
                    if (Build.VERSION.SDK_INT >= 19) {
                        // 4.4及以上系统使用这个方法处理图片
                        handleImageOnKitKat(data)
                    } else {
                        // 4.4以下系统使用这个方法处理图片
                        handleImageBeforeKitKat(data)
                    }
                }
            }

        }

    }
    @TargetApi(19)
    fun handleImageOnKitKat(data:Intent? ) {
        var imagePath = ""
        var uri = data!!.getData();
        if (DocumentsContract.isDocumentUri(this, uri)) {
            // 如果是document类型的Uri，则通过document id处理
            var docId = DocumentsContract.getDocumentId(uri);
            if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
                var id = docId.split(":")[1];
                // 解析出数字格式的id
                var selection:String = MediaStore.Images.Media._ID + "=" + id
                imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection)
            } else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) {

                var contentUri = ContentUris.withAppendedId(Uri.parse("content: //downloads/public_downloads"), docId.toLong())
                imagePath = getImagePath(contentUri, "");
            }
        } else if ("content".equals(uri.getScheme(),true)) {
            // 如果是content类型的Uri，则使用普通方式处理
            imagePath = getImagePath(uri, "")
        } else if ("file".equals(uri.getScheme(),true)) {
            // 如果是file类型的Uri，直接获取图片路径即可
            imagePath = uri.getPath();
        }

    }

    /**
     * android 4.4以前的处理方式
     * @param data
     */
    fun handleImageBeforeKitKat(data:Intent? ) {
        var uri = data!!.getData();
        var imagePath = getImagePath(uri, "")

    }

    fun getImagePath(uri:Uri , selection:String ):String {
        var path = ""
        // 通过Uri和selection来获取真实的图片路径
        var cursor = getContentResolver().query(uri, null, selection, null, null);
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA))
            }
            cursor.close();
        }
        return path
    }

}
